package com.zyy.meetObject2;

import java.util.Objects;

public class UserTest {
    public static void main(String[] args) {
        User u1 = new User("Tom",12);
        User u2 = new User("Tom",12);
        System.out.println(u1.equals(u2));//false
        //自定义的类在没有重写Object中equals()方法的情况下，调用的就是
        //object类声明的equals()对象的引用地址是否相同。(或比较两个对
        //象是否指向了堆空间中的同一个对象实体)


        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1==s2);//==判断String是两对象，其两个的id是不相同的
        System.out.println(s1.equals(s2));//true；
        //对于像String\file\Date和包装类等，它们都重写了Object类中的equals方法，用于
        //比较实体内容是否相同


    }
}
class User{
    String name;
    int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //所以一般equals方法要进行方法重写
    //手动实现
//    @Override
//    public boolean equals(Object obj) {
//        if(this == obj){
//            return true;
//        }
//        if(obj instanceof User){
//            User user = (User)obj;
//            if(this.age == user.age && this.name.equals(user.name)){
//                return true;
//            }
//        }
//        return false;
//    }
    //IDEA的自动实现重写
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }
    //注意：重写equals()之外，其内部的类类型的属性所在的类，也需要equals进行重写
}